package com.company.java.basic.day04;

public class Day04_FindArray {
    public static void main(String[] args) {
        //无序数组，顺序查找
        /*
        //建立数组
        int[] arr = {1,5,6,9,10,5,20};
        //给出要查找元素的值
        int value = 10;
        //创建索引默认为-1
        int index = -1;
        //遍历查找
        for (int i=0;i<arr.length;i++){
            if (arr[i]==value){
                index = i;
                break;
            }
        }
        //判断索引值给出结论
        if (index!=-1){
            System.out.println("该元素下表为："+index);
        }else {
            System.out.println("该元素不存在");
        }

         */

        //有序数组，二分查找法
        /*
        //创建数组
        int[] arr = {1,2,5,8,11,20,25};
        //建立头尾index
        int minIndex = 0;
        int maxIndex = arr.length-1;
        //寻找的值
         int value = 10;
         int index = -1;
        //遍历，第一次比较从头加尾/2开始，之后改变头尾,注意结束条件
        while (minIndex<=maxIndex){
            if (value==arr[(maxIndex+minIndex)/2]){
                index = (maxIndex+minIndex)/2;
                break;
            }else if (value>arr[(maxIndex+minIndex)/2]){
                minIndex = (maxIndex+minIndex)/2+1;
                continue;
            }else {
                maxIndex = (maxIndex+minIndex)/2-1;
            }
        }
        System.out.println(index);

         */

        //冒泡排序法
        /*
        //相邻的两个元素是否符合顺序，若符合不交换，不符合就交换，每一轮的交换都会把
        //最大或最小的沉底，直到结束轮次
        //建立数组
        int[] arr = {5,9,10,2,3,7};
        //第一层循环控制轮数,length-1 轮
        for (int i=1;i<arr.length;i++){
            //第二层循环控制次数 次数依次减一,第一轮循环length-1次
            for (int j=0;j<arr.length-i;j++){
                if (arr[j]>arr[j+1]){
                    arr[j]=arr[j]+arr[j+1];
                    arr[j+1]= arr[j] - arr[j+1];
                    arr[j]= arr[j] - arr[j+1];
                }
            }
        }
        for (int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }

         */

        //直接选着排序
        /*
        //在未排序的元素中找出最小或最大的元素，放在未排序元素的最前或最后
        //建数组
        int[] arr = {5,9,10,2,3,7};
        //第一层循环控制轮数，length-1轮
        for (int i=1;i<arr.length;i++){
            int index = 0;
            //二层控制比较次数
            for (int j=1;j<=arr.length-i;j++){
                if (arr[index]<arr[j]){
                    index = j;
                }
            }
            //找出后放在相应位置
            int set =arr.length-i;
            if (index != set){
                arr[index] = arr[index]+arr[set];
                arr[set] = arr[index]-arr[set];
                arr[index] = arr[index]-arr[set];
            }
        }
        for (int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }

         */



    }
}
